home *** CD-ROM | disk | FTP | other *** search
/ Die Speccy' 97 / Die Speccy' 97.iso / amiga_system / the_aminet / comm / bbs / bbbbs85.lha / rexx / bbsMan.rexx < prev    next >
OS/2 REXX Batch file  |  1995-01-25  |  9KB  |  351 lines

  1. /* $VER: bbsMan.rexx 8.4 (25.1.95)
  2. Copyright ⌐ 1994-95 Richard Lee Stockton
  3. Offline (LOCAL) BBBBS Manager
  4. FREELY DISTRIBUTABLE
  5. */
  6.  
  7. reader='C:mo'  /* path to YOUR text reader here. I use ppmore */
  8. vers='Version_8.4'
  9.  
  10. IF ~SHOW('P','QuickSortPort') THEN CALL setup.rexx()
  11. IF ~SHOW('P','QuickSortPort') THEN EXIT 666
  12.  
  13. NUMERIC DIGITS 14
  14. def=''
  15. pen2=''
  16. pen3=''
  17. lineup='1B'x'M'
  18. figarg='s:CONFIG.BBS'
  19. IF ~EXISTS(figarg) THEN figarg='BBS:BBS_TEXT/CONFIG.BBS'
  20. x=OPEN(f,figarg,'R')
  21. IF x=0 THEN
  22.   DO
  23.     SAY 's:CONFIG.BBS and BBS:BBS/CONFIG.BBS are both missing!'
  24.     EXIT
  25.   END
  26. lynes.=''
  27. DO i=1 TO 40
  28.   lynes.i=READLN(f)
  29. END
  30. CALL CLOSE(f)
  31.  
  32. compos=POS('/*',lynes.1)
  33. IF compos>0 THEN lynes.1=LEFT(lynes.1,compos-1)
  34. bbsname=STRIP(lynes.1)
  35. sysop=WORD(lynes.2,1)
  36. compos=POS('/*',lynes.3)
  37. IF compos>0 THEN lynes.3=LEFT(lynes.3,compos-1)
  38. bbsdevice=WORD(lynes.4,1)
  39. sysoplevel=WORD(lynes.5,1)
  40. bbspath=WORD(lynes.6,1)
  41. IF ~EXISTS(bbspath) THEN
  42.   DO
  43.     SAY bbspath 'does not exist!'
  44.     EXIT
  45.   END
  46. testchar=RIGHT(bbspath,1)
  47. IF testchar~='/' & testchar~=':' THEN bbspath=bbspath'/'
  48. extdevs=''
  49. DO i=1 TO WORDS(lynes.10)
  50.   test=WORD(lynes.10,i)
  51.   IF POS(':',test)=0 THEN ITERATE i
  52.   IF LEFT(test,2)='/*' THEN LEAVE i
  53.   extdevs=STRIP(extdevs test)
  54. END
  55. IF WORD(lynes.25,1)=1 THEN scratch=bbspath'Scratch'
  56. ELSE scratch='RAM:Scratch'
  57.  
  58. OPTIONS PROMPT' Are you 'sysop'? (Yn) > '
  59. PULL ans
  60. ans=LEFT(STRIP(ans),1)
  61. IF ans='N' THEN
  62.   DO
  63.     SAY
  64.     OPTIONS PROMPT ' Please enter your name > '
  65.     PULL name
  66.     name=cleanstring('1:'name)
  67.     IF name='' THEN EXIT 
  68.     IF ~EXISTS(bbspath'Users/'name) THEN
  69.       DO
  70.         SAY name 'does not exist!'
  71.         EXIT
  72.       END
  73.   END
  74. ELSE name=sysop
  75. userfile=bbspath'Users/'name
  76. CALL OPEN(f,userfile,'R')
  77. data.=''
  78. DO i=1
  79.   line=READLN(f)
  80.   IF EOF(f) THEN LEAVE i
  81.   data.i=line
  82. END
  83. CALL CLOSE(f)
  84. data.0=i-1
  85. password=data.5
  86. level=data.20
  87.  
  88. passprompt=pen3' Please Enter Password: '
  89. DO tries=1 TO 3
  90.   OPTIONS PROMPT passprompt
  91.   PULL newpassword
  92.   SAY def
  93.   IF(password=newpassword) THEN LEAVE tries; /* correct password */
  94.   IF tries=3 THEN
  95.     DO
  96.       SAY 
  97.       SAY 'Access terminated.'
  98.       SAY '*** Bad password ***' newpassword '***'
  99.       EXIT
  100.     END
  101.   passprompt='Incorrect.  Password: ' /* ask again */
  102. END
  103. SAY
  104. SAY' OK, 'name' here we go....'
  105. SAY
  106. menu.=''
  107. menu.0=vers
  108. menu.1='Doors'
  109. menu.2='Files'
  110. menu.3='Info'
  111. menu.4='Mail'
  112. menu.5='Messages'
  113. menu.6='Users'
  114. tab.0='                   '
  115. tab.2='         '
  116. tab.3='                '
  117. tab.6='             '
  118. CALL bbsspace()
  119. DO FOREVER
  120.   main=0
  121.   CALL header()
  122.   DO i=1 TO 6
  123.     SAY tab.0||i'.' menu.i
  124.   END
  125.   SAY tab.0'Q. Quit'
  126.   main=getinput()
  127.   IF main=1 THEN CALL bbsDoors(3000 name password)
  128.   ELSE IF main=2 THEN
  129.     DO subloop=1
  130.       CALL header()
  131.       SAY tab.2'1. File Manager (Add-Edit-Browse)'
  132.       SAY tab.2'2. Start File Usage Report'
  133.       SAY tab.2'3. External Devices'
  134.       temp=getinput()
  135.       IF temp=1 THEN
  136.         DO
  137.           CALL bbsFile(name password)
  138.           CALL bbsspace()
  139.         END
  140.       ELSE IF temp=2 THEN
  141.         DO
  142.           SAY
  143.           SAY 'Enter -1 (or blank) for no least-downloaded-files report, or'
  144.           OPTIONS PROMPT 'enter smallest least-downloaded filesize to report > '
  145.           PULL filesize
  146.           IF ~DATATYPE(filesize,'W') THEN filesize=-1
  147.           IF filesize<-1 THEN filesize=-1
  148.           SAY
  149.           IF filesize>=0 THEN
  150.             SAY 'Includes least-used files larger than' filesize 'bytes.'
  151.           SAY 'The FILELISTS_REPORT will be left in email for you.'
  152.           SAY
  153.           ADDRESS AREXX bbsREPORT.rexx name 'FILES' filesize
  154.           LEAVE subloop
  155.         END
  156.       ELSE IF temp=3 THEN
  157.         DO
  158.           dl=bbsExtDL.baud(name level 3000 20 1 extdevs)
  159.           IF dl='' THEN BREAK
  160.           topath=GETCLIP('BBS_topath')
  161.           IF topath='' THEN topath=GETCLIP('BBS_frompath')
  162.           todir=GetFile(150,36,topath,'',' Select Directory ',,'NOFILES')
  163.           IF RIGHT(todir,1)='/' THEN todir=LEFT(todir,LENGTH(todir)-1)
  164.           IF WORD(STATEF(todir),1)='DIR' THEN
  165.             DO
  166.               IF todir~=topath THEN CALL SETCLIP('BBS_topath')
  167.               DO i=1 TO WORDS(dl)
  168.                 mf=WORD(dl,i)
  169.                 SAY 'Copying' mf'...'
  170.                 ADDRESS COMMAND 'COPY' mf todir 'CLONE'
  171.               END
  172.             END
  173.           ELSE SAY pen3'*'def||todir||pen3'* is not a valid directory!'def
  174.         END
  175.       ELSE IF temp='Q' | temp='' THEN leave subloop
  176.     END
  177.   ELSE IF main=3 THEN
  178.     DO subloop=1
  179.       CALL header()
  180.       SAY tab.3'1. Daily log'
  181.       SAY tab.3'2. Numbers log'
  182.       SAY tab.3'3. QUICK log'
  183.       SAY tab.3'4. USER log'
  184.       SAY tab.3'5. Information'
  185.       SAY tab.3'6. Scratch:'
  186.       SAY tab.3'7. RAM:'
  187.       SAY tab.3'8. Hourly Usage'
  188.       SAY tab.3'9. BBS Statistics'
  189.       t=''
  190.       temp=getinput()
  191.       IF temp='' | temp='Q' THEN LEAVE subloop
  192.       ELSE IF temp=1 THEN
  193.         DO
  194.           OPTIONS PROMPT '['pen3'RETURN'def']=TODAY, or enter Log Date ('pen3||DATE('S')||def') > '
  195.           PULL t 
  196.           IF t='' THEN t=DATE('S')
  197.           t=bbspath'Logs/log.'t
  198.         END
  199.       ELSE IF temp=2 THEN t=bbspath'Logs/Numbers.log'
  200.       ELSE IF temp=3 THEN t=bbspath'Logs/QUICK.log'
  201.       ELSE IF temp=4 THEN t=bbspath'Usage/USER.LOG'
  202.       ELSE IF temp=5 THEN t=bbspath'Information/'
  203.       ELSE IF temp=6 THEN t=scratch'/'
  204.       ELSE IF temp=7 THEN t='RAM:'
  205.       ELSE IF temp=8 THEN CALL ShowHourly.rexx(name 20 1 0)
  206.       ELSE IF temp=9 THEN CALL bbsSTATS.rexx(name 1 0)
  207.       IF t='' THEN
  208.         DO
  209.           OPTIONS PROMPT pen3'                          Press RETURN 'def
  210.           PULL junk
  211.         END
  212.       ELSE ADDRESS COMMAND reader t
  213.     END
  214.   ELSE IF main=4 THEN
  215.     DO
  216.       CALL SETCLIP('BBSMAIL_ARG','1')
  217.       CALL bbsMail(3000 name password)
  218.       CALL SETCLIP('LOCAL_email')
  219.     END
  220.   ELSE IF main=5 THEN CALL bbsMsg.rexx(3000 name password)
  221.   ELSE IF main=6 THEN
  222.     DO subloop=1
  223.       CALL header()
  224.       SAY tab.6'1. User Info'
  225.       SAY tab.6'2. User Profiles'
  226.       SAY tab.6'3. Friends List'
  227.       SAY tab.6'4. Edit User'
  228.       IF level>sysoplevel THEN
  229.         DO
  230.           SAY tab.6'5. New Users'
  231.           SAY tab.6'6. Change UserName'
  232.           SAY tab.6'7. Start Inactive Users Report'
  233.           SAY tab.6'8. Kill A User'
  234.         END
  235.       temp=getinput()
  236.       IF temp=1 THEN
  237.         CALL bbsOther.rexx(3000 name sysoplevel 1 bbspath bbsname)
  238.       ELSE IF temp=2 THEN CALL bbsProfiles.rexx(name level sysoplevel 20 1 6000 bbspath)
  239.       ELSE IF temp=3 THEN CALL bbsFriends.rexx(name 1)
  240.       ELSE IF temp=4 THEN CALL bbsEditUser.rexx(6000 name)
  241.       ELSE IF temp=5 & level>sysoplevel THEN CALL bbsNewUsers.rexx(name level 1 3000)
  242.       ELSE IF temp=6 & level>sysoplevel THEN
  243.         DO
  244.           SAY
  245.           OPTIONS PROMPT 'Enter Current UserName > '
  246.           PULL oldname
  247.           IF oldname~='' THEN
  248.             DO
  249.               oldname=TRANSLATE(STRIP(oldname),'_',' ')
  250.               IF EXISTS(bbspath'/Users/'name) THEN CALL ChangeUserName(oldname)
  251.               ELSE SAY oldname 'does not have a userfile!'
  252.             END
  253.         END
  254.       ELSE IF temp=7 & level>sysoplevel THEN
  255.         DO
  256.           ADDRESS AREXX bbsREPORT.rexx name 'USERS'
  257.           SAY
  258.           SAY 'INACTIVE_USERS report will be left in email for you.'
  259.           SAY
  260.           LEAVE subloop
  261.         END
  262.       ELSE IF temp=8 & level>sysoplevel THEN CALL bbsKillUser()
  263.       ELSE IF temp='Q' | temp='' THEN leave subloop
  264.     END
  265.   ELSE IF main='Q' THEN EXIT
  266. END
  267. EXIT
  268.  
  269. cleanstring:
  270. PARSE ARG nflag':'cstr
  271. namemask=COMPRESS(XRANGE(),XRANGE('A','Z')' _-')
  272. IF nflag=1 THEN
  273.   DO
  274.     cstr=COMPRESS(cstr,"'`")
  275.     cstr=TRANSLATE(cstr,,namemask)
  276.     cstr=SPACE(cstr,1,'_')
  277.     RETURN cstr
  278.   END
  279. bot=XRANGE(,'1F'x)
  280. top=XRANGE('7F'x)
  281. cstr=COMPRESS(cstr,bot||top)
  282. IF nflag=0 THEN cstr=STRIP(cstr)
  283. RETURN cstr
  284.  
  285.  
  286. bbsspace:
  287. ADDRESS COMMAND 'C:info >'scratch'/infout' bbsdevice
  288. ok=OPEN(f,scratch'/infout','R')
  289. IF ok=0 THEN RETURN 20
  290. line=READLN(f)
  291. line=READLN(f)
  292. line=READLN(f)
  293. line=READLN(f)
  294. CALL CLOSE(f)
  295. bbsk=WORD(line,4)
  296. IF ~DATATYPE(bbsk,'N') THEN
  297.   DO
  298.     line=bbsdevice 'is not an info compatible device!'
  299.     SAY pen3||line||def||CR
  300.     bbsk=0
  301.     RETURN
  302.   END
  303. IF bbsk<1 THEN bbsk=0
  304. bbsk=bbsk*512
  305. RETURN
  306.  
  307.  
  308. header:
  309. SAY def
  310. temp=pen2'BBBBS_Manager'pen3'___'pen2||menu.main
  311. IF main>0 THEN temp=temp'_Menu'
  312. SAY pen3'   'CENTER(temp||pen3,65,'_')||def
  313. SAY pen3'  /                                             \'def
  314. SAY pen3' / 'def||RIGHT(comma(STORAGE()),14) 'bytes available in RAM.       'pen3 '\'def
  315. SAY pen3' \ 'def||RIGHT(comma(bbsk),14) 'bytes available for uploads.  'pen3 '/'def
  316. SAY pen3'  \'RIGHT(name'__',45,'_')'/'def
  317. SAY
  318. RETURN
  319.  
  320.  
  321. comma: PROCEDURE
  322. ARG num .
  323. t=''
  324. x=POS('.',num)
  325. IF x>0 THEN t=SUBSTR(num,x)
  326. num=num%1
  327. dgt=LENGTH(num)
  328. numtext=''
  329. IF dgt>3 THEN numtext=','RIGHT(num,3)
  330. IF dgt>6 THEN numtext=','LEFT(RIGHT(num,6),3)||numtext
  331. IF dgt>9 THEN numtext=','LEFT(RIGHT(num,9),3)||numtext
  332. IF dgt>12 THEN
  333.   DO
  334.     numtext=','LEFT(RIGHT(num,12),3)||numtext
  335.     numtext=LEFT(num,dgt-12)||numtext
  336.   END
  337. ELSE IF dgt>9 THEN numtext=LEFT(num,dgt-9)||numtext
  338. ELSE IF dgt>6 THEN numtext=LEFT(num,dgt-6)||numtext
  339. ELSE IF dgt>3 THEN numtext=LEFT(num,dgt-3)||numtext
  340. ELSE numtext=num
  341. RETURN numtext||t
  342.  
  343.  
  344. getinput:
  345. OPTIONS PROMPT LEFT(tab.main,LENGTH(tab.main)-8)||pen3'Select: 'def
  346. PULL inarg
  347. inarg=STRIP(LEFT(inarg,1))
  348. RETURN inarg
  349.  
  350. /* bbsMan.rexx */
  351.